//创建服务端程序完成图片的上传功能。
//点击选择图片进行图片选择，点击提交时，将本地选中图片上传到服务端程序所在目录的upload文件夹下。
//当访问localhost:8081/list时，将upload文件夹下的所有图片显示到页面上。
const http=require('http');
const fs=require('fs');
const path=require('path');

var indexPath=path.join(__dirname,'/index.html');
var listPath=path.join(__dirname,'/list.html');
http.createServer((req,res)=>{
    var urlObj=new URL(req.url,'http://localhost:8081');
    var pathName=urlObj.pathname;
    if(pathName=='/'){
        var indexContent=fs.readFileSync(indexPath);
        res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
        res.write(indexContent);
        res.end();
    }else if(pathName=='/upload'){
        var str='';
        req.setEncoding('binary');
        req.on('data',chunk=>{
            str+=chunk;
        })
        req.on('end',()=>{
            var arr=str.split('\r\n');
            var imgArr=arr.slice(4,-2);
            var imgStr=imgArr.join('\r\n');
            var buf=Buffer.from(imgStr,'binary'); //第二个参数：encoding 参数标识将 string 转换为Buffer数据时要使用的字符编码(文件传输使用二进制数据)
            var fileName=Date.now();
            var imagePath=path.join(__dirname,`/upload/${fileName}.png`);
            fs.writeFileSync(imagePath,buf,{'encoding':'binary'});
            res.end();
        })
    }else if(pathName=='/list'){
        var listContent=fs.readFileSync(listPath);
        res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
        res.write(listContent);
        res.end();
    }else if(pathName=='/getlist'){
        var uploadPath=path.join(__dirname,'/upload');
        var images=fs.readdirSync(uploadPath);
        res.writeHead(200,{'content-type':'text/plain'});
        res.write(JSON.stringify(images));
        res.end();
    }else if(pathName.indexOf('/image/')==0){  //对于图片的src请求，需要服务器端将图片数据返回给浏览器，规定好content-type的值为图片格式，浏览器就会自动解析图片数据进行展示
        var imgName=pathName.slice(7);
        var extName=imgName.slice(imgName.indexOf('.')+1);
        var imgPath=path.join(__dirname,`/upload/${imgName}`);
        var imgBuffer=fs.readFileSync(imgPath);
        if(extName=='jpg'){
            res.writeHead(200,{'content-type':'image/jpeg'});
            res.write(imgBuffer);
            res.end();
        }else{
            res.writeHead(200,{'content-type':'image/png'});
            res.write(imgBuffer);
            res.end();
        }
    }
}).listen(8081)